package designpattern.struct.proxy.dynamic.cglibs;


import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * CGlib代理，完成方法的增强
 *
 * @author: cuihao
 * @create: 2020-09-22 14:25
 **/
public class DynamicInterceptor implements MethodInterceptor {

    /**
     * @param o           被代理的类
     * @param method      原始方法
     * @param objects     原始方法的参数
     * @param methodProxy 用于调用原始方法
     * @return
     * @throws Throwable
     */
    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        Long startTime = System.currentTimeMillis();
        // 执行目标对象的方法
        Object object = methodProxy.invokeSuper(o, objects);
        System.out.println("花费时间:" + (System.currentTimeMillis() - startTime));
        return object;
    }
}
